Rappels : Il est possible d'itérer sur une chaine de caractères. Il est également possible (en Python) de vérifier qu'un caractère est présent dans une chaîne, mais attention, ceci ne fonctionne pas dans tous les langages ! Voir les exemples ci-dessous.
In [ ]:
chaine = "Hello World"
for i in chaine:
print(i)
if "a" in "abcd":
print("Oui, a est là")
In [ ]:
#Rappel : les chaînes sont des objets immutables... démo :
chaine = "Bonjour"
for i in range(len(chaine)):
chaine[i] = "a"
# => on n'a pas le droit de modifier chaine !!!
Exercice 1 : Écrire une méthode qui compte le nombre d'occurences (apparitions) d'un caractère dans une chaîne de caractères, tous deux passés en paramètres.
In [ ]:
%load_ext doctestmagic
In [ ]:
def compte_car(chaine, lettre):
'''
:entree chaine: chaine de caractères
:entree lettre: un caractère recherché
:sortie compteur: int, un entier
:post-cond: compteur donne le nb d'occurences du caractère recherché dans la chaîne.
>>> compte_car("bonjour", "o")
2
>>> compte_car("", "i")
0
>>> compte_car("etoile", "j")
0
'''
compteur = 0
for caractere in chaine:
if caractere == lettre:
compteur +=1
return compteur
In [ ]:
%doctest compte_car
Exercice 2 : Même question, mais cette fois, avec un 'while' et non un 'for'
In [ ]:
def compte_car_bis(chaine, lettre):
compteur = 0
i = 0
while i < len(chaine):
if chaine[i] == lettre:
compteur += 1
i += 1
return compteur
print("Test de compte_car")
print(compte_car("Villeurbanne", "l"))
print(compte_car("La vie est belle", "e"))
print(compte_car("Toto", "z"))
print("Test de compte_car_bis")
print(compte_car_bis("Villeurbanne", "l"))
print(compte_car_bis("La vie est belle", "e"))
print(compte_car_bis("Toto", "z"))
Exercice 3 : Écrire une méthode qui retourne l'indice de la première occurrence d'un caractère dans une chaîne. Attention à ce que vous allez dire dans le contrat.
In [ ]:
def indice_min_char(chaine, caractere):
'''
:entree chaine: str
:entre caractere: str
:sortie indice: indice
:post-condition: indice donne l'indice du premier caractere dans la chaine et est égal à -1
si la chaine est vide ou le caractère non présent
>>> indice_min_char("Bonjour", "j")
3
>>> indice_min_char("","x")
-1
>>> indice_min_char("hello beauty", "k")
-1
>>> indice_min_char("hell", "l")
2
>>> indice_min_char("hello","o")
5
'''
indice = -1
i = 0
while i <= len(chaine):
if chaine[i] == caractere:
indice = i
i = len(chaine) + 1
return indice
indice_min_char("ttata", "c")
In [ ]:
%doctest indice_min_char
Exercice 4. Écrire une méthode estMiroir qui prend en paramètres deux chaînes de caractères de même longueur et qui renvoie True si les chaînes sont miroir l'une de l'autre, et False sinon.
In [ ]:
def estMiroir(ch1,ch2):
'''
:entree ch1: une chaine de caractères
:entree ch2: une autre chaîne de caractères
:sortie bool: True si les chaînes sont miroir, False sinon
:pre-cond: les chaînes sont de même longueur
'''
invertCh1 = ""
for i in range(len(ch1)):
invertCh1 = invertCh1 + ch1[len(ch1)-i-1]
return invertCh1 == ch2
a ="toto"
b = "otot"
c = "truc"
d = "trrr"
print(estMiroir(a,b))
print(estMiroir(c,d))
Ci-dessous une solution plus simple (en deux lignes, dans laquelle on réutilise miroir, que l'on a défini la dernière fois..
In [ ]:
def miroir(chaine):
'''
:entre la chaine de caractère
:sortie la chaine de caractere avec les caracteres inversés
'''
stri=""
for i in range(0,len(chaine)):
stri+=chaine[len(chaine)-i-1]
return stri
def estMiroir(a, b):
return a == miroir(b)
print(estMiroir("Toto", "tata"))
print(estMiroir("titi", "itit"))